;:poke56,110:clr
;:sys36864
	;.opt oo
	*= $c000
print	=$ffd2
vic	=$d000
tmp	=2
key	=198
setnam	=$ffbd
setpar	=$ffba
open	=$ffc0
close	=$ffc3
flop	=8
get	=65508
clrchn	=$ffcc
chkin	=$ffc6
chkout	=$ffc9
clall	=$ffe7
input	=$ffcf
namen	=$7000
line	=1909
axout	=$bdcd
clrl	=59903
space	=$ab3f
mtmp	=4
data	=$8100
dtmp	=247
st	=144
druck	=4
return	=$aad7
maxi	=250 	; zeile 1064
dwechsel	=$cf00
cint	=65409
busy	=$6e00
redd	=$6f00
section	=704
sum1	=820
same	=$ce00
keyp	=631
quote	=212
	jmp start
title	.byte "\x93\x8e\x08\x12\x99\xb0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xae"
	.byte "\xdd  twin search system  tss  vers. 2.0  \xdd"
	.byte "\xdd  written by n. heusler,   nh-080789  \xdd"
	.byte "\xdd  ein nss programm   <c> nss 1988/89  \xdd"
	.byte "\xad\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xbd"
	.byt 13
desk	.byte " dieses utility prueft, ob sich auf ei-"
	.byte "  ner diskette  mehrere identische files"
	.byte "  befinden."
	.byt 13
	.byte "\x11 bitte diskette einlegen !"
	brk
abb	.byt 13
	.byte "\x11 programmabbruch !\x11"
	brk
dst	.byt 13
	.byte "\x11 disk\x11\x9d\x9d\x9d\x9d\xa3\xa3\xa3\xa3\x91: "
errflg	.word 0
namef	.byt 13
	.byte "\x13\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11 dir-maske ? *\x9d"
	brk
lef	.byt 13
	.byte "\x11 lese filenamen"
	brk
nab	.byt 13
	.byte "\x11 bitte verfahren waehlen (ende = <ret>)"
	.byt 13
	.byte "\x11     \x12 1 \x1d\x1d 2 \x1d\x1d 3 \x1d\x1d 4 \x1d\x1d 5 \x92   6 "
	brk
stu	.byt 13
	.byte "\x11 anzahl files: "
	brk
pic2	.byt 13
	.byte "\x13\x11\x11\x11\x11\x11\x11 scanne "
	brk
pic2a	.byte " files"
	brk
litz	.byte "\x13\x11\x11\x11\x11\x11\x11\x11\x11 "
	brk
gef	.byte " gesamtaufstellung erwuenscht ?       "
	.byt 13
	.byte "\x11  \x12 d \x92\x91\x9d\x9d\x9d\xa4\xa4\xa4\x11 rucker"
	.byt 13
	.byte "  \x12 s \x92 chirm"
	.byt 13
	.byte "  \x12 n \x92 ein"
	brk
head	.byt 13,13
	.byte " nr  filename          addr leng s1 s2"
he2	.byte " s3 s4"
	.byt 13,0
wet	.byt 13
	.byte "\x11 noch eine diskette/a\x11\x9d\xa3\x91bbruch ? [j/n/a]"
	brk
none	.byt 13
	.byte "\x11 zu wenige files !"
	brk
full	.byt 13
	.byte "\x11 fehler\x11\x9d\x9d\x9d\x9d\x9d\x9d\xa3\xa3\xa3\xa3\xa3\xa3\x91: bitte maximal"
	.byte " 250 files !"
	brk
dreht	.byt 13
	.byte "\x13\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11 bitte diskette einlegen ! (taste)"
	brk
wahwah	.byte " ausgabe der duplikate auf"
	.byt 13
	.byte "\x11  \x12 d \x92\x91\x9d\x9d\x9d\xa4\xa4\xa4\x11 rucker"
	.byt 13
	.byte "  \x12 s \x92 chirm\x11"
	.byt 13
	.byte " oder:\x11"
	.byt 13
	.byte "  \x12 a \x92\x91\x9d\x9d\x9d\xa4\xa4\xa4\x11 bbruch"
	.byt 13
	.byte "  \x12 n \x92 eustart"
	.byt 13
	.byte "  \x12 z \x92 urueck"
	brk
keyt	.byt 13
	.byte " - bitte eine taste druecken -"
	brk
tittel	.byt 13,13
	.byte " nss twin-searcher 2.0  nh-100789-arr"
	.byt 13,13
	.byte " liste der duplikate:"
	.byt 13
	.byte " (verfahren"
	brk
pet1	.byt 13
	.byte " folgende files sind duplikate:"
	.byt 13
	.byte " (gruppe "
	brk
pet2	.byte " files)"
	.byt 13,13,0
nopet	.byte " --- keine duplikate gefunden ---"
	.byt 13,0
stat1	.byt 13
	.byte "  anzahl files: "
	brk
stat2	.byt 13
	.byte " davon unikate: "
	brk
shift	.byt 145,148,141,32
drt	.byt 13
	.byte "\x11 druckvorgang laeuft..."
	brk
atwo	.byt 13
	.byte "\x11 write file open: ueberlesen ! (taste)\x91\x91"
	brk
gui	.byt 13
	.byte " \x12 w \x92 eiter  oder  \x12 a \x92 bbruch ?"
	brk
nons	.byte "gesperrt"
	brk
d0	.byte "$0:"
	.word 0,0,0,0,0,0,0,0
i0	.byte "i0"
stack	brk
anzahl	brk
mode	=166
curr	=167
leng	brk
sum2	=sum1+2
sum3	=sum1+3
sum4	=sum1+4
sum5	=sum1+5
byte	brk
device	brk
disk	brk
high	brk
curr2	=168
samec	brk
gruz	brk
xmerk	brk
double	brk
auto	brk
t	.word 0
dmode	brk
grbit	.byt 1,2,4,8,16,32,64,128
hextab	.byte "0123456789abcdef"
strout	sta mtmp
	sty mtmp+1
str	ldy #0
	lda (mtmp),y
	bne goon
	rts
goon	jsr print
	inc mtmp
	bne str
	inc mtmp+1
	bne str
waitkey	lda #0
	sta key
wk	cmp key
	beq wk
	sta key
	rts
derrm	ldx #15
	jsr chkin
	jsr get
	cmp #"0"
	sta errflg
	beq schnitt
	lda #<dst
	ldy #>dst
	jsr strout
	lda #32
	.byt $2c
schnitt	lda #205
	sta evtl
gt	jsr get
evtl	lda print
	cmp #13
	bne gt
cer	jsr clrchn
	lda errflg
	cmp #"0"
	beq okay
	lda dmode
	bne gnade
devil	ldx stack
	txs
	jsr clrchn
	lda #2
	jsr close
	lda #4
	jsr close
	lda #15
	jsr close
	ldx #4
	stx key
crea	dex
	bmi frei
	lda shift,x
	sta keyp,x
	bne crea
frei	lda #<abb
	ldy #>abb
	jmp strout
okay	rts
derr	lda #0
	.byt $2c
derr2	lda #128
	sta dmode
	jmp derrm
gnade	lda #<gui
	ldy #>gui
	jsr strout
	lda #0
	sta key
	jsr clrchn
gg	jsr get
	cmp #"a"
	beq devil
	cmp #"w"
	bne gg
	jsr clr10
	inx
	jsr clrl
	inx
	jsr clrl
	ldx curr
	lda #4
	sta redd,x
	rts
a0out	lda #0
	jmp axout
headout	lda #<drt
	ldy #>drt
	jmp strout
rein	ldy #0
	sta (tmp),y
	inc tmp
	bne tico
	inc tmp+1
tico	rts
clrscr	ldx #5
d	jsr clrl
	inx
	cpx #25
	bcc d
	rts
hexout	pha
	lsr
	lsr
	lsr
	lsr
	jsr hex2
	pla
hex2	stx dummy+1
	and #15
	tax
	lda hextab,x
	jsr print
dummy	ldx #0
	rts
wfobearb	lda #0
	jsr rein
	lda t
	sta tmp
	lda t+1
	sta tmp+1
reade	jsr get
	bne reade
	sta key
blink	lda #<atwo
	ldy #>atwo
	jsr strout
	jsr blik
	lda key
	bne fort
	ldx #16
	jsr clrl
	jsr blik
	lda key
	beq blink
fort	ldx #16
	jsr clrl
	jmp file
blik	ldx #255
	ldy #155
bk	dex
	bne bk
	dey
	bne bk
	rts
wechsel	lda #<wet
	ldy #>wet
	jsr strout
	lda #0
	sta key
jn	jsr get
	cmp #"a"
	beq qdevil
	cmp #"j"
	beq jop
	cmp #"n"
	bne jn
	rts
jop	inc disk
	lda anzahl
	ldx disk
	sta dwechsel-1,x
	rts
qdevil	jmp devil
testw	ldx disk
	beq raus
	lda curr
	beq drehd
cpdwn	dex
	cmp dwechsel,x
	beq drehd
	cpx #0
	bne cpdwn
raus	rts
drehd	lda #<dreht
	ldy #>dreht
	jsr strout
	jsr waitkey
clr10	ldx #10
	jmp clrl
calcd	ldx #0
	stx high
	asl
	rol high
	asl
	rol high
	asl
	rol high
	clc
	adc #<data
	sta dtmp
	lda high
	adc #>data
	sta dtmp+1
	rts
calcn	tax
	lda #<namen
	ldy #>namen
	sta tmp
	sty tmp+1
loop1	txa
	bne loop2
	rts
loop2	dex
	ldy #-1
loop3	iny
	lda (tmp),y
	bne loop3
	iny
	tya
	clc
	adc tmp
	sta tmp
	bcc loop1
	inc tmp+1
	bne loop1
verfout	ldx #1
verl	lda mode
	and grbit-1,x
	beq vern
	jsr space
	txa
	ora #"0"
	jsr print
vern	inx
	cpx #7
	bcc verl
	lda #")"
	jsr print
	jsr return
	jmp return
petze	inc gruz
	lda #<pet1
	ldy #>pet1
	jsr strout
	ldx gruz
	jsr a0out
	lda #","
	jsr print
	jsr space
	ldx samec
	inx
	jsr a0out
	lda double
	clc
	adc samec
	adc #1
	sta double
	lda #<pet2
	ldy #>pet2
	jsr strout
	lda curr
	jsr petnam
	ldx #0
nlp	stx xmerk
	lda same,x
	jsr petnam
	ldx xmerk
	inx
	cpx samec
	bcc nlp
	jmp return
petnam	jsr calcn
	jsr space
	jsr print
	lda #34
	jsr print
	ldy #0
pnam	lda (tmp),y
	beq namefk
	jsr print
	iny
	bne pnam
namefk	lda #34
	jsr print
	jmp return
aget	lda auto
	bne an
	jmp get
an	lda #"d"
	rts
start	jsr cint
	lda #0
	sta vic+33
	sta vic+32
	tsx
	stx stack
	lda #32
	sta desk
	lda #<title
	ldy #>title
	jsr strout
	jsr waitkey
	jsr clall
	ldx #<i0
	ldy #>i0
	lda #2
	jsr setnam
	lda #15
	tay
	ldx #flop
	jsr setpar
	jsr open
	jsr derr
	lda #31
	sta mode
	lda #0
	sta disk
	sta anzahl
	lda #<namen
	ldy #>namen
	sta tmp
	sty tmp+1
flopp	lda #<namef
	ldy #>namef
	jsr strout
	ldx #3
	stx quote
in0	jsr input
	cmp #13
	beq finin
	sta d0,x
	inx
	cpx #19
	bcc in0
finin	txa
	ldx #<d0
	ldy #>d0
	jsr setnam
	ldx #flop
	ldy #0
	lda #2
	jsr setpar
	jsr open
	jsr derr
	lda #<lef
	ldy #>lef
	jsr strout
	ldx #2
	jsr chkin
	jsr get
	jsr get
	jsr get
	jsr get
	jsr get
	jsr get
read1	jsr get
	tay
	bne read1
file	lda tmp
	sta t
	lda tmp+1
	sta t+1
	jsr get
	jsr get
	jsr get
	jsr get
r	jsr get
	cmp #"b"
	beq fini
	cmp #34
	bne r
s	jsr get
	cmp #34
	beq et
	jsr rein
	bne s
et	jsr get
	cmp #"*"
	beq wfo
	tax
	bne et
	jsr rein
	inc anzahl
	lda anzahl
	cmp #maxi
	bcc file
	lda #<full
	ldy #>full
	jsr strout
	jmp devil
fini	jsr clrchn
	lda #2
	jsr close
	lda #<stu
	ldy #>stu
	jsr strout
	ldx anzahl
	jsr a0out
	lda #0
	sta key
	jsr wechsel
	beq now
	jsr clrscr
	jmp flopp
now	lda anzahl
	cmp #2
	bcs drin
	lda #<none
	ldy #>none
	jsr strout
	jmp devil
wfo	jmp wfobearb
drin	lda #<nab
	ldy #>nab
	jsr strout
	lda #0
	sta key
getm	jsr get
	cmp #13
	beq retus
	ldx disk
	bne trafi
	cmp #141
	beq retus
trafi	cmp #"1"
	bcc getm
	cmp #"7"
	bcs getm
	sbc #"0"
	tax
	lda grbit,x
	eor mode
	sta mode
	stx tmp
	txa
	asl
	asl
	adc tmp
	tax
	ldy #3
inv	lda line,x
	eor #128
	sta line,x
	inx
	dey
	bne inv
	jmp getm
retus	and #128
	sta auto
	lda mode
	beq getm
	jsr clrscr
	lda #<pic2
	ldy #>pic2
	jsr strout
	ldx anzahl
	jsr a0out
	lda #<pic2a
	ldy #>pic2a
	jsr strout
	lda #0
	sta curr
	lda #<namen
	ldy #>namen
	sta tmp
	sty tmp+1
	lda #<data
	ldy #>data
	sta dtmp
	sty dtmp+1
	lda #1
	ldx #0
loopb	sta redd,x
	dex
	bne loopb
floop	jsr testw
	inc curr
	ldx #8
	jsr clrl
	lda #<litz
	ldy #>litz
	jsr strout
	ldx curr
	jsr a0out
	lda #":"
	jsr print
	jsr space
	lda #34
	jsr print
	ldy #0
lad	lda (tmp),y
	beq fou0
	jsr print
	iny
	bne lad
fou0	tya
	ldx tmp
	ldy tmp+1
	jsr setnam
	sec
	adc tmp
	sta tmp
	bcc fo
	inc tmp+1
fo	lda #34
	jsr print
	ldx #flop
	lda #2
	tay
	jsr setpar
	jsr open
	jsr derr2
	bne aus
	ldx #2
	jsr chkin
	jsr get
	ldy #0
	sta (dtmp),y
	iny
	jsr get
	sta (dtmp),y
	lda #0
	ldx #5
ck	sta sum1,x
	dex
	bpl ck
inloop	lda st
	and #64
	bne aus
	inc sum1
	bne noi
	inc sum1+1
noi	jsr get
	sta byte
	clc
	adc sum2
	adc #0
	sta sum2
	lda sum3
	eor byte
	sta sum3
	lda sum4
	asl
	adc #0
	adc byte
	sta sum4
	lda sum1
	eor byte
	clc
	sbc sum5
	asl
	adc #0
	sta sum5
	jmp inloop
aus	jsr clrchn
	lda #2
	jsr close
	jsr derr2
	bne autsch
	ldx curr
	dec redd,x
autsch	ldy #2
	ldx #0
copyp	lda sum1,x
	sta (dtmp),y
	iny
	inx
	cpx #6
	bcc copyp
	tya
	clc
	adc dtmp
	sta dtmp
	bcc noi2
	inc dtmp+1
noi2	=*
	lda curr
	cmp anzahl
	bcs nfloop
	jmp floop
nfloop	lda #0
	sta desk
	lda #<title
	ldy #>title
	jsr strout
	lda #<gef
	ldy #>gef
	jsr strout
	lda #0
	sta key
getdsn	jsr aget
	cmp #"n"
	bne ae
	jmp nixda
ae	cmp #"s"
	beq printd
	cmp #"d"
	bne getdsn
	jsr headout
	ldx #druck
	.byt $2c
printd	ldx #3
	stx device
	lda #4
	ldy #0
	jsr setpar
	tya
	jsr setnam
	lda #32
	sta he2
	lda #83
	sta he2+1
	cpx #3
	bne pri
	lda #13
	sta he2
	lda #0
	sta he2+1
pri	jsr open
	ldx #4
	jsr chkout
	lda #0
	sta curr
	lda #<head
	ldy #>head
	jsr strout
	lda #<namen
	ldy #>namen
	sta tmp
	sty tmp+1
	lda #<data
	ldy #>data
	sta dtmp
	sty dtmp+1
outloop	inc curr
	lda curr
	cmp #100
	bcs gut
	jsr space
gut	lda curr
	cmp #10
	bcs gut2
	jsr space
gut2	ldx curr
	jsr a0out
	jsr space
	lda #34
	jsr print
	ldy #0
lpd	lda (tmp),y
	beq fou02
	jsr print
	iny
	bne lpd
fou02	tya
	sec
	adc tmp
	sta tmp
	bcc fo2
	inc tmp+1
fo2	lda #34
	jsr print
lig	jsr space
	iny
	cpy #17
	bcc lig
	ldx curr
	lda redd,x
	beq fredi
	lda #<nons
	ldy #>nons
	jsr strout
	jmp npr
fredi	ldy #1
	lda (dtmp),y
	jsr hexout
	dey
	lda (dtmp),y
	jsr hexout
	jsr space
	ldy #3
	lda (dtmp),y
	jsr hexout
	dey
	lda (dtmp),y
	jsr hexout
	jsr space
	ldy #4
	lda (dtmp),y
	jsr hexout
	jsr space
	iny
	lda (dtmp),y
	jsr hexout
	jsr space
	ldx device
	cpx #3
	beq npr
	iny
	lda (dtmp),y
	jsr hexout
	jsr space
	iny
	lda (dtmp),y
	jsr hexout
npr	lda #8
	clc
	adc dtmp
	sta dtmp
	bcc wend
	inc dtmp+1
wend	jsr return
	lda curr
	cmp anzahl
	bcs deddi
	jmp outloop
deddi	jsr clrchn
	lda #4
	jsr close
	ldx device
	cpx #3
	bne nixda
	lda #<keyt
	ldy #>keyt
	jsr strout
	jsr waitkey
nixda	lda #0
	sta gruz
	sta double
	sta desk
	lda #<title
	ldy #>title
	jsr strout
	lda #<wahwah
	ldy #>wahwah
	jsr strout
	lda #0
	sta key
ga	jsr aget
	cmp #"a"
	bne wtrr
	jmp devil
wtrr	cmp #"n"
	bne conti
	jmp start
conti	cmp #"z"
	bne contl
	jmp nfloop
contl	cmp #"s"
	beq drei
	cmp #"d"
	bne ga
	jsr headout
	ldx #druck
	.byt $2c
drei	ldx #3
	stx device
	lda #4
	ldy #0
	jsr setpar
	tya
	jsr setnam
	jsr open
	ldx #4
	jsr chkout
	lda #<tittel
	ldy #>tittel
	jsr strout
	jsr verfout
	ldy #0
	sty curr
loopb2	lda redd,y
	sta busy-1,y
	iny
	bne loopb2
loopa	ldx curr
	lda #0
	sta samec
	lda busy,x
	beq teste
	jmp braf
teste	inc busy,x
	inx
	stx curr2
	lda curr
	jsr calcd
	ldy #7
loopd	lda (dtmp),y
	sta section,y
	dey
	bpl loopd
loope	ldx curr2
	lda busy,x
	bne falsch
	txa
	jsr calcd
	lda mode
	and #1
	beq notest1
	ldy #2
	lda section,y
	cmp (dtmp),y
	bne falsch
	iny
	lda section,y
	cmp (dtmp),y
	bne falsch
notest1	lda mode
	and #2
	beq notest2
	ldy #4
	lda section,y
	cmp (dtmp),y
	bne falsch
notest2	lda mode
	and #4
	beq notest3
	ldy #5
	lda section,y
	cmp (dtmp),y
	bne falsch
notest3	lda mode
	and #8
	beq notest4
	ldy #6
	lda section,y
	cmp (dtmp),y
	bne falsch
notest4	lda mode
	and #16
	beq notest5
	ldy #7
	lda section,y
	cmp (dtmp),y
	bne falsch
notest5	lda mode
	and #32
	beq notest6
	ldy #0
	lda section,y
	cmp (dtmp),y
	bne falsch
	iny
	lda section,y
	cmp (dtmp),y
	bne falsch
notest6	ldx samec
	inc samec
	lda curr2
	sta same,x
	tax
	inc busy,x
falsch	inc curr2
	lda curr2
	cmp anzahl
	bcs qlle
	jmp loope
qlle	lda samec
	beq braf
	jsr petze
braf	inc curr
	ldx curr
	inx
	cpx anzahl
	bcs qlla
	jmp loopa
qlla	lda gruz
	bne qllaa
	lda #<nopet
	ldy #>nopet
	jsr strout
qllaa	lda #<stat1
	ldy #>stat1
	jsr strout
	ldx anzahl
	jsr a0out
	lda #<stat2
	ldy #>stat2
	jsr strout
	sec
	lda anzahl
	sbc double
	tax
	jsr a0out
	jsr return
	jsr clrchn
	lda #4
	jsr close
	ldx device
	cpx #3
	bne fleiss
	lda #<keyt
	ldy #>keyt
	jsr strout
	jsr waitkey
fleiss	lda #0
	sta auto
	jmp nixda
